#!/bin/bash

# 前端代码打包和脚本复制脚本
# 功能：打包matrix_html目录的前端代码到preDeploy/html目录，并复制相关脚本文件

set -e  # 遇到错误时退出

# 检查DEPLOY环境变量是否已设置
if [ -z "$deploy" ]; then
    echo "错误: 环境变量 'deploy' 未设置"
    echo "请先设置deploy变量，例如: export deploy=/path/to/deploy"
    exit 1
fi

echo "开始前端代码打包和脚本复制..."

# 定义源目录和目标目录
WORKSPACE_ROOT="$HOME/workspace"
MATRIX_INDEX_DIR="$WORKSPACE_ROOT/demo/matrix_html"
HTML_TARGET_DIR="$deploy/html"
SCRIPTS_TARGET_DIR="$deploy/www_static"

# 检查源目录是否存在
if [ ! -d "$MATRIX_INDEX_DIR" ]; then
    echo "错误: 源目录不存在 - $MATRIX_INDEX_DIR"
    exit 1
fi

echo "源目录检查通过: $MATRIX_INDEX_DIR"

# 清空preDeploy目录
echo "清空preDeploy目录..."
rm -rf "$deploy"/*
mkdir -p "$HTML_TARGET_DIR"
mkdir -p "$SCRIPTS_TARGET_DIR"

# 1. 打包前端代码到preDeploy/html目录
echo "正在打包前端代码到 $HTML_TARGET_DIR..."
if command -v rsync >/dev/null 2>&1; then
    # 使用rsync进行同步（更高效），排除.git目录
    rsync -av --delete --exclude='.git' "$MATRIX_INDEX_DIR/" "$HTML_TARGET_DIR/" 2>/dev/null
    if [ $? -eq 0 ]; then
        echo "前端代码打包完成 (使用rsync)"
    else
        echo "警告: rsync执行出现问题，尝试使用cp命令"
        rm -rf "$HTML_TARGET_DIR"/*
        cp -r "$MATRIX_INDEX_DIR"/* "$HTML_TARGET_DIR/" 2>/dev/null
        if [ $? -eq 0 ]; then
            echo "前端代码打包完成 (使用cp)"
        else
            echo "错误: 前端代码打包失败"
            exit 1
        fi
    fi
else
    # 使用cp命令
    rm -rf "$HTML_TARGET_DIR"/*
    cp -r "$MATRIX_INDEX_DIR"/* "$HTML_TARGET_DIR/" 2>/dev/null
    if [ $? -eq 0 ]; then
        echo "前端代码打包完成 (使用cp)"
    else
        echo "错误: 前端代码打包失败"
        exit 1
    fi
fi

# 2. 复制matrix_shell/scripts/plugins目录下的所有.sh脚本文件
TOOLS_SOURCE_DIR="$(dirname "$(dirname "$0")")/plugins"
if [ -d "$TOOLS_SOURCE_DIR" ]; then
    echo "正在复制plugins目录下的.sh脚本文件..."
    sh_files_count=0
    for script in "$TOOLS_SOURCE_DIR"/*.sh; do
        if [ -f "$script" ]; then
            cp "$script" "$SCRIPTS_TARGET_DIR/" 2>/dev/null
            if [ $? -eq 0 ]; then
                ((sh_files_count++))
                echo "已复制: $(basename "$script")"
            else
                echo "警告: 复制失败 - $(basename "$script")"
            fi
        fi
    done
    echo "plugins目录下共复制了 $sh_files_count 个.sh文件"
else
    echo "警告: plugins源目录不存在 - $TOOLS_SOURCE_DIR"
fi

# 3. 复制matrix_shell/scripts/plugins目录下的所有.sh脚本文件
PLUGINS_SOURCE_DIR="$(dirname "$0")"
if [ -d "$PLUGINS_SOURCE_DIR" ]; then
    echo "正在复制plugins目录下的.sh脚本文件..."
    sh_files_count=0
    for script in "$PLUGINS_SOURCE_DIR"/*.sh; do
        if [ -f "$script" ] && [ "$(basename "$script")" != "$(basename "$0")" ]; then
            # 排除当前脚本文件本身
            cp "$script" "$SCRIPTS_TARGET_DIR/" 2>/dev/null
            if [ $? -eq 0 ]; then
                ((sh_files_count++))
                echo "已复制: $(basename "$script")"
            else
                echo "警告: 复制失败 - $(basename "$script")"
            fi
        fi
    done
    echo "plugins目录下共复制了 $sh_files_count 个.sh文件"
else
    echo "警告: plugins源目录不存在 - $PLUGINS_SOURCE_DIR"
fi

# 4. 复制Git配置文件到用户目录
GIT_CONFIG_SOURCE_DIR="$WORKSPACE_ROOT/demo/matrix_shell/config/git"
if [ -d "$GIT_CONFIG_SOURCE_DIR" ]; then
    echo "正在复制Git配置文件到用户目录..."
    
    # 复制.gitconfig文件到用户主目录
    if [ -f "$GIT_CONFIG_SOURCE_DIR/.gitconfig" ]; then
        cp "$GIT_CONFIG_SOURCE_DIR/.gitconfig" "$HOME/" 2>/dev/null
        if [ $? -eq 0 ]; then
            echo "用户级.gitconfig文件更新完成"
        else
            echo "警告: 用户级.gitconfig文件更新失败"
        fi
    fi
    
    # 复制.ssh目录到用户主目录（如果存在）
    if [ -d "$GIT_CONFIG_SOURCE_DIR/.ssh" ]; then
        # 创建目标.ssh目录（如果不存在）
        mkdir -p "$HOME/.ssh"
        
        # 设置正确的权限
        chmod 700 "$HOME/.ssh" 2>/dev/null || echo "警告: 无法设置.ssh目录权限"
        
        # 复制SSH密钥文件
        cp "$GIT_CONFIG_SOURCE_DIR/.ssh"/* "$HOME/.ssh/" 2>/dev/null
        if [ $? -eq 0 ]; then
            echo "SSH密钥文件复制完成"
            # 设置SSH密钥文件的权限
            chmod 600 "$HOME/.ssh/id_rsa" 2>/dev/null || echo "警告: 无法设置id_rsa文件权限"
            chmod 644 "$HOME/.ssh/id_rsa.pub" 2>/dev/null || echo "警告: 无法设置id_rsa.pub文件权限"
            chmod 600 "$HOME/.ssh/yyf.pem" 2>/dev/null || echo "警告: 无法设置yyf.pem文件权限"
        else
            echo "警告: SSH密钥文件复制失败"
        fi
    fi
else
    echo "警告: Git配置源目录不存在 - $GIT_CONFIG_SOURCE_DIR"
fi

# 5. 复制Nginx配置文件到www_static目录
NGINX_CONFIG_SOURCE_DIR="$WORKSPACE_ROOT/demo/matrix_shell/config/nginx"
if [ -d "$NGINX_CONFIG_SOURCE_DIR" ]; then
    echo "正在复制Nginx配置文件到www_static目录..."
    
    # 复制Nginx配置文件
    cp "$NGINX_CONFIG_SOURCE_DIR"/* "$SCRIPTS_TARGET_DIR/" 2>/dev/null
    if [ $? -eq 0 ]; then
        echo "Nginx配置文件复制完成"
    else
        echo "警告: Nginx配置文件复制失败"
    fi
else
    echo "警告: Nginx配置源目录不存在 - $NGINX_CONFIG_SOURCE_DIR"
fi

# 6. 创建 html.war 文件以兼容旧的部署方式
echo "正在创建 html.war 文件..."
if command -v zip >/dev/null 2>&1; then
    (cd "$deploy" && zip -r html.war html)
    if [ $? -eq 0 ]; then
        echo "html.war 文件创建完成"
    else
        echo "警告: html.war 文件创建失败"
    fi
else
    echo "警告: 系统未安装 zip 命令，跳过 html.war 文件创建"
fi

# 7. 创建用于Linux部署的压缩包
echo "正在创建用于Linux部署的压缩包..."
if command -v tar >/dev/null 2>&1; then
    (cd "$deploy" && tar -cf www_static/tmp.tar html www_static)
    if [ $? -eq 0 ]; then
        echo "Linux部署压缩包创建完成"
    else
        echo "警告: Linux部署压缩包创建失败"
    fi
else
    echo "警告: 系统未安装 tar 命令，跳过Linux部署压缩包创建"
fi

echo "前端代码打包和脚本复制操作完成"
echo "目标目录: $deploy"